; Adjust tool change retraction and extrusion distances/feedrates

M291 R"Tool Change Settings" P"Select tool to adjust" S4 K{"Tool 0","Tool 1"}
if result = -1
  abort "Operation cancelled"

var toolIndex = input
var toolLabel = var.toolIndex == 0 ? "Tool 0" : "Tool 1"

M291 R"Tool Change Settings" P"Select parameter to adjust" S4 K{"Retraction","Extrusion"}
if result = -1
  abort "Operation cancelled"

var isRetraction = (input == 0)
var distance = 0.0
var distanceGlobal = ""

if var.isRetraction
  M291 R{var.toolLabel^" Retraction"} P"Enter retraction distance (mm, positive)" S5 L0 H50 J1
  if result = -1
    abort "Operation cancelled"
  set var.distance = -abs(input)

  if var.toolIndex == 0
    set var.distanceGlobal = "tool0RetractDistance"
  else
    set var.distanceGlobal = "tool1RetractDistance"
else
  M291 R{var.toolLabel^" Extrusion"} P"Enter extrusion distance (mm, positive)" S5 L0 H50 J1
  if result = -1
    abort "Operation cancelled"
  set var.distance = abs(input)

  if var.toolIndex == 0
    set var.distanceGlobal = "tool0ExtrudeDistance"
  else
    set var.distanceGlobal = "tool1ExtrudeDistance"

var suffix = var.isRetraction ? "Retract" : "Extrude"
var toolNumber = var.toolIndex == 0 ? "0" : "1"
var targetFile = "0:/sys/user/variables/Tool-" ^ var.toolNumber ^ "-" ^ var.suffix ^ ".g"
var summary = var.toolLabel ^ " " ^ (var.isRetraction ? "retraction" : "extrusion")

echo >{var.targetFile} "set global."^{var.distanceGlobal}^" = "^{var.distance}

M98 P{var.targetFile}

var feedDisplay = var.isRetraction ? "F3000" : "F9000"
M291 R"Tool Change Settings" P{var.summary^" set to E"^var.distance^" "^var.feedDisplay} S2